package com.itec.learn.java.design.factory.simple;

import com.itec.learn.java.design.factory.CheesePizza;
import com.itec.learn.java.design.factory.GreekPizza;
import com.itec.learn.java.design.factory.Pizza;
import com.itec.learn.java.design.factory.SimplePizza;

/**
 * 创建不同披萨的“简单工厂”
 * 如果将方法申明为静态方法，那么就是“静态工厂”
 *
 * “静态工厂”的缺点是不能通过继承改变创建方法的行为。
 * @author chenyiqun
 */
public class SimplePizzaFactory {

    /**
     * 将创建不同类型的披萨抽象出来有什么好处？
     * SimplePizzaFactory可以有许多客户，虽然目前只有orderPizza()方法是它的客户。
     * 把创建披萨的代码包装进一个类，以后当实现改变时，只需要修改这个类即可。
     *
     * 我们正是要把具体实例化的过程从客户的代码中删除，实现对象的使用和对象的创建"解耦"。
     * 使用对象的客户（PizzaStore）不用关系对象的创建过程！
     *
     * 当披萨店有了加盟店之后，比如纽约加盟店，芝加哥加盟店，如何解决不同区域的披萨的差异呢？
     * 一种方法是提供不同的工厂方法，如NYPizzaFactory,ChicagoPizzaFactory，
     * 这样不同区域的加盟店就有不同的工厂可以使用。
     *
     * @param type
     * @return
     */
    public Pizza createPizza(String type){
        Pizza pizza;
        if (type.equals("cheese")){
            pizza = new CheesePizza();
        } else if (type.equals("greek")){
            pizza = new GreekPizza();
        } else {
            pizza = new SimplePizza();
        }
        pizza.setType(type);
        return pizza;
    }

}
